工作中實作 Client/Server 的過程中經常會遇到需要根據 URI 分派各種指令的情境。
於是想起可能 Jserv 前輩分享過的 computed goto,
但在實體機器使用 perf 分析的結果跟預期的很不一樣。
於是研究 MARSS-RISCV,試圖找出問題所在。
中途參加了 Skymizer ISSCC 的分享會,開始研究 NVDLA 與 SystemC。
過程中意外找到實作簡潔的 RISC-V-TLM,在 code stream 分析上有很大的幫助,
讓我能統計機率分布的結果,並用視覺化的散佈圖呈現。
最後也開始對 SystemC based emulator 產生了興趣。
沒錯,我是隻興趣廣泛的程序猿,
但不能把發散的興趣當飯吃。
所以這次系列文會從簡介 systemC 功能開始,並把篇幅集中在實作最簡單的 RV32I 的 CPU Emulator。
SyetemC 會著重在 LT model,至少會介紹安裝流程、wait、Blocking transport,
Sensitive、DMI、Quantum keeper、Phasis、Non-Blocking transport 等等功能有用到會再提。
RISC-V 的部分會實作 RV32I Base Instruction,可能會再加入其他 extension,
以 Version 20191213 為準,相關文件可以在這邊找到 RISC-V Specifications。
ONNC、Unit Test 視進度加入。
興趣廣泛是優點也是缺點。
鐵人賽目標明確,而且時間有限,超時就中斷。
換句話說就是強迫遵守 Time-boxing 原則,
以最小需求為準,計劃、重新計劃、並小步前進,
練習從功能與時間中做出妥協是最主要的目標。
像美式足球員一樣,朝目標盡全力衝刺吧!